1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | IF NOT xInit THEN UM ( sName := 'Normal Operation', dwAllowsLeavingFromStates := PACK_ML.State.Stopped OR PACK_ML.State.Aborted OR PACK_ML.State.Idle, IF SysStrCmp(Client.sCommandToPLC, Client.LockCommands[0]) = 0 THEN _open := TRUE; ELSIF SysStrCmp(Client.sCommandToPLC, 'UnSuspend') = 0 THEN UnSuspend(); END_CASE Client.iCommandToPLC := 0; Client.sCommandToPLC := ''; Client.bReadyToPLC := FALSE; CASE UM.CurrentState OF PACK_ML.State.Stopped: ; PACK_ML.State.Aborted: PACK_ML.State.Idle: PACK_ML.State.Complete : PACK_ML.State.Execute : CASE Client.ActualStep OF 0: Client.ActualStep := 300; 300: IF _open THEN Client.Message:='Opening the door.'; //Open Door Client.ActualStep := 301; _open := FALSE; IF _close THEN Client.Message:='Closing the door.'; //Close Door Client.ActualStep := 311; _close := FALSE; END_IF 301: IF FHPP_CTRL_Door.Ready AND FHPP_CTRL_Door.ActualPosition < iTest_Door_Close_Pos THEN Client.ActualStep := 312; ELSIF FHPP_CTRL_Door.Ready THEN 312: FHPP_CTRL_Door.SetValuePosition := iTest_Door_Close_Pos; Client.ActualStep := 313; 313: Client.ActualStep := 314; 314: Client.Message:='Closed the door.'; END_IF; END_CASE PACK_ML.State.Resetting : 0: Client.ActualStep := 100; 100: IF NOT FHPP_CTRL_Door.Fault AND FHPP_CTRL_Door.SupplyVoltagePresent THEN Client.ActualStep := 101; Client.ActualStep := 111; ELSIF FHPP_CTRL_Door.DriveEnabled AND NOT FHPP_CTRL_Door.HomingValid AND delay.Q THEN END_IF; IF FHPP_CTRL_Door.Fault THEN 102: (*Homing*) IF FHPP_CTRL_Door.HomingValid THEN END_IF; Client.Message:='Closing the door.'; IF FHPP_CTRL_Door.Ready AND FHPP_CTRL_Door.ActualPosition > iTest_Door_Close_Pos THEN Client.ActualStep := 0; ELSIF FHPP_CTRL_Door.Ready THEN END_IF; Client.Message:='Closing the door.'; IF delay.Q THEN END_IF startPulse := TRUE; IF FHPP_CTRL_Door.AckStart THEN startPulse := FALSE; 114: END_IF; PACK_ML.State.Starting : Client.ActualStep := 0; PACK_ML.State.Completing : Client.ActualStep := 200; Client.ActualStep := 201; 201: 202: 203: //Client.ActualStep := 0; PACK_ML.State.Clearing : IF NOT (DI_EmergencyGF AND NOT DI_EmergencyFF) THEN Abort(); Client.ActualState := UM.CurrentState; IF FHPP_CTRL_Door.Fault AND NOT (Client.ActualState = 6 OR Client.ActualState = 0 OR Client.ActualState = 1 ) THEN END_IF; bl (Enable := startPulse, TIMEHIGH := T#500MS, TIMELOW := T#500MS ,OUT => FHPP_CTRL_Door.StartTask); IF Client.ActualStep = 100 THEN ELSE (* Enable drive *) FHPP_CTRL_Door.EnableDrive := TRUE; |